package main

import (
	"fmt"
)

func main() {
	a := 11
	//var b int32 = 12
	switch a { //switch后还可以跟有返回值的函数
	case 1:
		fmt.Println(a)
		fallthrough //当这个case执行的时候，如果有这个关键字，那么这个case执行完后还可以无条件的继续往下执行下一个case里的代码，这是switch穿透，但只能穿透一个case
	case 5:
		fmt.Println(a)
	case 10:
		fmt.Println(a)
	//case b://case后跟的数据类型要与switch后的数据类型一致，否则报错
	case 12, 13, 14: //case可以接受多个条件，满足其中一个就能执行该case下的代码

	//case 10://switch不允许两个case的条件都相同

	default:
		fmt.Println("值错误")
	}

	var x interface{}
	var y = 10
	x = y
	switch i := x.(type) {
	case nil:
		fmt.Printf("x的类型是%T", i)
	case int:
		fmt.Println("x 是int")
	case float64:
		fmt.Println("x 是float64")
	case func(int) float64:
		fmt.Println("x 是func(int)型")
	case bool, string:
		fmt.Println("x 是bool或string型")
	default:
		fmt.Println("未知型")
	}
}
